//////////////////////////////////////////////////////////////////////////////////
//   Copyright 2011   Mark Price     mark at epickrram.com                      //
//                                                                              //
//   Licensed under the Apache License, Version 2.0 (the "License");            //
//   you may not use this file except in compliance with the License.           //
//   You may obtain a copy of the License at                                    //
//                                                                              //
//       http://www.apache.org/licenses/LICENSE-2.0                             //
//                                                                              //
//   Unless required by applicable law or agreed to in writing, software        //
//   distributed under the License is distributed on an "AS IS" BASIS,          //
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   //
//   See the License for the specific language governing permissions and        //
//   limitations under the License.                                             //
//////////////////////////////////////////////////////////////////////////////////

package com.epickrram.testing;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;
import java.util.logging.Logger;

public final class Main
{
    private static final Logger LOGGER = Logger.getLogger(Main.class.getName());

    public static void main(String[] args)
    {
        final Random random = new Random();
        final Collection<Object> cache = new ArrayList<Object>();
        int counter = 0;
        while(true)
        {
            if(++counter % 10 == 0)
            {
                cache.clear();
            }
            
            cache.add(new TestObjectOne(System.nanoTime()));

            LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(random.nextInt(345)));

            cache.add(new TestObjectTwo(System.nanoTime()));

            LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(random.nextInt(123)));

            cache.add(new TestObjectTwo(Long.toString(System.nanoTime())));

            LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(random.nextInt(500)));

            for(int i = 0, n = random.nextInt(50) + 10; i < n; i++)
            {
                cache.add(new TestObjectThree("foo", i));
            }
        }
    }
}
